package com.smart.community.property.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 卫生费视图对象
 * 用于前端展示，包含房户号、社区名、楼栋名、单元名等信息
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 2.0.0
 */
@Data
public class SanitationFeeVO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 主键ID
     */
    private Long id;
    
    /**
     * 费用编号
     */
    private String feeNo;
    
    /**
     * 用户ID
     */
    private Long userId;
    
    /**
     * 用户姓名
     */
    private String userName;
    
    /**
     * 社区ID
     */
    private Long communityId;
    
    /**
     * 社区名称
     */
    private String communityName;
    
    /**
     * 楼栋ID
     */
    private Long buildingId;
    
    /**
     * 楼栋名称
     */
    private String buildingName;
    
    /**
     * 单元ID
     */
    private Long unitId;
    
    /**
     * 单元名称
     */
    private String unitName;
    
    /**
     * 房户ID
     */
    private Long householdId;
    
    /**
     * 房户号
     */
    private String roomNumber;
    
    /**
     * 房户地址（格式：{社区名}-{楼栋名}-{单元名}）
     */
    private String householdAddress;
    
    /**
     * 计费周期
     */
    private String billingPeriod;
    
    /**
     * 费用金额
     */
    private BigDecimal amount;
    
    /**
     * 到期日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate dueDate;
    
    /**
     * 支付状态：0-未支付，1-已支付，2-逾期
     */
    private Integer paymentStatus;
    
    /**
     * 支付状态名称
     */
    private String paymentStatusName;
    
    /**
     * 已支付金额
     */
    private BigDecimal paymentAmount;
    
    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime paymentTime;
    
    /**
     * 支付方式
     */
    private String paymentMethod;
    
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    /**
     * 获取支付状态名称
     * 
     * @return 支付状态的中文名称
     */
    public String getPaymentStatusName() {
        if (paymentStatus == null) {
            return "未知";
        }
        
        switch (paymentStatus) {
            case 0:
                return "未支付";
            case 1:
                return "已支付";
            case 2:
                return "逾期";
            default:
                return "未知";
        }
    }
    
    /**
     * 构建房户地址
     */
    public void buildHouseholdAddress() {
        StringBuilder address = new StringBuilder();
        if (communityName != null) {
            address.append(communityName);
        }
        if (buildingName != null) {
            if (address.length() > 0) {
                address.append("-");
            }
            address.append(buildingName);
        }
        if (unitName != null) {
            if (address.length() > 0) {
                address.append("-");
            }
            address.append(unitName);
        }
        this.householdAddress = address.toString();
    }
} 